# coding:utf-8
from UrlManager import UrlManager
from HtmlDownloader import HtmlDownloader
from HtmlParser import HtmlParser
from DataOutput import DataOutput

class SpiderMan(object):
    def __init__(self):
        self.manager=UrlManager()
        self.downloader=HtmlDownloader()
        self.parser=HtmlParser()
        self.output=DataOutput()
    def crawl(self,root_url):
        #添加入口url
        self.manager.add_new_url(root_url)
        #判断url管理器中是否有新的url,同时判断抓取了多少个url
        while(self.manager.has_new_url() and self.manager.old_url_size()<200):
            try:
                #从url管理器获取新的url
                new_url=self.manager.get_new_url()
                #从html下载器下载网页
                html=self.downloader.download(new_url)
                #从html解析器抽取网页数据
                new_urls,data=self.parser.parser(new_url,html)
                #将抽取的url添加到url管理器中
                self.manager.add_new_urls(new_urls)
                #将数据存储到数据存储器
                self.output.store_data(data)
                print "抓取"+self.manager.old_url_size()+"个"
            except Exception,e:
                print "抓取失败"
        self.output.output_html()

if __name__=="__main__":
    spider=SpiderMan()
    spider.crawl("http://baike.baidu.com/view/284853.htm")